home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ZThread-2.2.6.lha / ChangeLog < prev    next >
Text File  |  2002-06-11  |  25KB  |  709 lines

  1. VERSION 2.2.6:
  2.  
  3.   Type in FastLock.h fixed.
  4.     
  5. VERSION 2.2.5:
  6.  
  7.   Added an AtomicCount class that will use as lightwieght a locking mechanism
  8.   as possible. This class is used for limited reference counting and is typically
  9.   not under high contention.
  10.     
  11. VERSION 2.2.4:
  12.  
  13.   Added mutex implementation for Win32 that will use a normal Mutex object;
  14.   this will perform better under high contention.
  15.  
  16.   Added a smarter yield function for Win32 implementations; this will kick
  17.   in on NT (or better) and will operate a bit more intelligently than 
  18.   Sleep(0)
  19.  
  20.   Fixed a typo in LockedQueue
  21.   
  22.   Made Thread::Reference public, most compilers did not complain - gcc 3.0+
  23.   didn't like it private. 
  24.  
  25.   Renamed ZTHREAD_USE_NATIVE_LOCKS to ZTHREAD_USE_SPIN_LOCKS since that is
  26.   more descriptive of whats going on when that is defined.
  27.     
  28. VERSION 2.2.3:
  29.  
  30.   Added a ThreadedExecutor.
  31.   Added a template to create Futures. Suggestions to improve the syntax welcome
  32.     
  33.   Fixed some of the compiling errors in the tests & examples I had not
  34.   updated since I made some changes to the library during this last week.
  35.  
  36.   updated. If you have good examples, or test programs of your own please
  37.   send them to me. I'd like to add some decent examples for using ZThreads but
  38.   I don't have much free time right now.
  39.     
  40. VERSION 2.2.2:
  41.  
  42.   Added Handle that removes ownership concerns for Runnable objects.
  43.   Thread changed to support it.
  44.     
  45. VERSION 2.2.1:
  46.  
  47.   Added correct destructor to Queue.
  48.  
  49.   Changes to the Thread class, this should help eliminate confusion 
  50.   about interruption. (See guide)
  51.  
  52.   Killing removed, replace with Cancelable semantics that are based
  53.   on interruption. (See guide)
  54.     
  55.   Added a guide for using threads, runnables & interruption
  56.     
  57.   Finished CancelableTask
  58.  
  59.   Added a guide for using Threads and Runnables to the Thread documentation
  60.  
  61.   Documentation Updates:
  62.  
  63.   - Thread
  64.   - CancelableTask
  65.  
  66.   Removing Future, letting the other changes settle down for a little while,
  67.   while I take time to explore that a little more. 
  68.  
  69.   Hopefully, the additional documentation is helpful.
  70.     
  71. VERSION 2.2.0:
  72.  
  73.   *knock, knock, knock* Housekeeping! - Code cleanup, test cases and more 
  74.   documentation. The goal here is to make the basic parts of the library
  75.   independant from the rest, helping to make a more concrete code based to
  76.   build some new abstractions on. 
  77.   
  78.   Cleaning up the dependancies between the various sources, added
  79.   better detection for the implementation selection and simplified whats required
  80.   to build the library in general. This will make it easier to expand on the library
  81.   as a whole, and it will make it easier for others to use in different make utilites.
  82.     
  83.   Decoupled alot of the implementation specific code from the wrappers for the library.
  84.  
  85.   Added several FastLock implementations and a VannilaRecursiveLock. People adding
  86.   support for (MacOS for example) should have an easy time creating a FastLock, each
  87.   lock uses a different strategy to serialize access, so they should server as a
  88.   nice template. 
  89.  
  90.   Added test cases for the various primatives ZThreads uses. This helps debugging
  91.   and should help people creating primatives for new platforms.
  92.     
  93.   Adding support for new platforms should be _very_ easy. I will include a guide for 
  94.   how to do this. I've had many requests for MacOS support and for BeOS support, 
  95.   unfortuneatly I don't have a Mac & I don't have time to play with BeOS or Darwin.
  96.   I hope the guide will help some kind soul to contribute the few small classes that
  97.   are required to extend this library to support a few more platforms. OR if you 
  98.   would like to contribute an actual Mac and save yourself some work, that'll work
  99.   for me too - I promise I'll add support to a platform if you give me one :)
  100.     
  101.   Simplified exception classes, helps support error reporting from Futures
  102.   (new feature discussed below)
  103.     
  104.   Cleaned up autoconf scripts, I will probably still maintain VS6 project files
  105.   (eventaully VS7 when I get a computer that handle it, my 2K box is old) but I'm
  106.   trying to move mainly to autoconf.
  107.  
  108.   * autoconf should be able to use vc to compile & link. I've had moderate success
  109.   (I can compile using msvc with autoconf & cygwin, but have trouble linking)
  110.   it would be nice to have autoconf handle that. I'm looking for help getting that 
  111.   fixed & for getting autoconf to build on cygwin with gcc as well. I don't have
  112.   enough free time to really invesitage that myself.
  113.     
  114.   Changed the semantics of the Condition to make its correct usage clearer.
  115.   Documentation will discuss the changes.
  116.  
  117.   The library can also be configure through the zthread/Config.h file.
  118.  
  119.   Remvoed the need for certain objects to be static
  120.     
  121.   -----------------------------------------------------------------------------------
  122.  
  123.   New things,
  124.  
  125.   * PriorityMutex, PriorityInheritanceMutex
  126.   * PrioritySemaphore
  127.   * PriorityCondition
  128.   * Barrier (revised)
  129.   * Time
  130.   * Futures 
  131.   * ThreadFactories
  132.   * CancelableTasks
  133.   * Enhanced Executor framework
  134.   * Enhanced ThreadLocals
  135.   * Waitables
  136.     
  137.   Exposed the Time class, which offers relative time values with millsecond
  138.   resolution. 
  139.     
  140.   Added destroyValue() to AbstractThreadLocal, called when a thread that
  141.   has set values on a ThreadLocal is about to exit.
  142.  
  143.   Improved daemon thread handling. Daemon threads that have compelted can be removed
  144.   sooner. Daemon threads creating other daemon threads will not cause an error.
  145.  
  146.   Added template methods to Condition that allow a wait on predicate.
  147.  
  148.   Guard template greatly refined. Quite versitle, I hope to write a short article to
  149.   explain more fully. The syntax is the same, so code using the Guard from previous
  150.   versions should not be affected.
  151.  
  152.   Synchronization policies deemed uncessarry and removed. It's much better to simply
  153.   parametize the locks, allowing the user specified lock to be the policy. Policies
  154.   are much more awkward than a parametized template for that purpose. This change only
  155.   affects 2 templates.
  156.  
  157.   TypedLockables not really neccessary w/o syhcronization policies, replaced with the   
  158.   more useful ClassLock that can be used as a parametized type to create a class-wide
  159.   lock. LockableAdpater also removed.
  160.     
  161.   Scraped Observable and Timer classes. Moved the Observable class to the contrib/ 
  162.   directory. It was interesting, but it was not very flexible and surprizingly less
  163.   useful that it seemed. Introduction of the Time class should make it far more 
  164.   effective for people to create thier own Observable classes that will be more 
  165.   robust..
  166.     
  167.   Thread priorities now on by default, and there new PriorityXXX classes
  168.   that take advantage of priorities.
  169.  
  170.   Dropped SharedInstance support in favor of the SmartPtr. The SmartPointer is 
  171.   really just an example of how something like that can be made with ZThreads.
  172.  
  173.   Revised the Barrier class to act more like a Barrier should.
  174.  
  175.   Futures introduced. Future act as a placeholder for a value that may not
  176.   be available yet.
  177.  
  178.   NullMutex renamed NullLockable to reflect its purpose better.
  179.   SimpleQueue removed, a LockedQueue with a NullLockable is equivalent
  180.  
  181.   Killed_Exception replaced Unexpected_Exception
  182.  
  183.   Removed SmartPtr, reverted back just the IntrusivePtr and CountedPtr. Those 
  184.   are simple and are all the library requires. I don't want repeat the work that
  185.   has been done by groups, such as boost, to try and provide a set of smart pointers
  186.   that works across all compilers.
  187.  
  188.   Executor greatly improved.
  189.     
  190.   -----------------------------------------------------------------------------------
  191.  
  192.   Documentation Updates:
  193.  
  194.   - Cancelable
  195.   - Waitable
  196.   - Lockable
  197.   - Time
  198.   - Queues
  199.   - FastMutex, Mutex, PriorityMutex, PriorityInheritanceMutex
  200.   - FastRecursiveMutex, RecursiveMutex
  201.   - Condition, PriorityCondition
  202.   - Semaphore, PrioritySemaphore
  203.   - ThreadLocal
  204.   - Barrier
  205.   - Executor
  206.  
  207.   Added Design Overview
  208.   Added Porting Guide
  209.   Added Executor Pattern (pending)
  210.  
  211.   Futures almost complete, still need to update the interruption hooks - I
  212.   made so many changes I wanted to put the new release out and get some 
  213.   feedback.
  214.     
  215. VERSION 2.1.6:
  216.  
  217.   Maintence to the Mutex, Semaphore & Monitor classes. 
  218.     
  219. VERSION 2.1.5:
  220.  
  221.   Eliminated race condition when starting daemon threads.
  222.  
  223.   Removed dllexport/dllimport decorator from some policy classes to 
  224.   avoid unresolved symbol errors when exporting some classes from
  225.   dll on Win32
  226.  
  227.   Adjusted order of constructors in StaticSingleton so the cleanup
  228.   function doesn't need to be registered with atexit.
  229.  
  230.   Changed the IntrusivePtr so it works with the Synchronization policies
  231.   provided.
  232.  
  233.   Added throw() to the destructors of example classes that required it.
  234.  
  235.   void* _dispatch(void*) moved into namespace ZThread in POSIX_ThreadOps.cc
  236.  
  237.   explicit typenames added to Observable where required
  238.     
  239. VERSION 2.1.4:
  240.  
  241.   Refined the Guard template to allow policy to control its behavior keeping the 
  242.   interface compatible with the previous Guard implementation.
  243.       
  244.   Removed const-ness of the notify method for Observable objects.
  245.  
  246.   Applied new Guard and policies to Observable, restoring the serialization of the 
  247.   2 argument notify method (fixing the Timer)
  248.  
  249.   Added policies to Singleton
  250.     
  251. VERSION 2.1.3:
  252.     
  253.   Minor update for win32 build. Just a few adjustments so it build correctly
  254.   under MSVC.
  255.  
  256. VERSION 2.1.2:
  257.  
  258.   Unused daemon threads no longer cause assertion failure.
  259.     
  260.   LOCK templates renamed to LockType to avoid collisions with
  261.   LOCK symbols defined in some linux headers.
  262.  
  263.   Added a TypedLock
  264.   Added ClassLock policy for SmartPtr.
  265.   
  266.   Updated Timer.
  267.     
  268. VERSION 2.1.1:
  269.  
  270.   Fixed a race condtion in the ConditionImpl.
  271.     
  272. VERSION 2.1.0:
  273.  
  274.   Updated the autoconf configuration to allow windows or posix version to be
  275.   be selected. 
  276.  
  277.   Documented all the build flags, see BUILDING
  278.     
  279.   Changes to the implementation to make things more general, robust and easier to
  280.   maintain. 
  281.  
  282.   Exploring a more tightly synchronized implementation whose logic is
  283.   simpler than the loosely synchronized versions in 2.0.X.
  284.  
  285.     
  286. VERSION 2.0.5:
  287.  
  288.   There was an error in the way threads were being started, the parent thread was
  289.   waiting on the childs monitor, which shouldn't happen, and if the child's yeild()
  290.   didn't return control to the parent before the child continued, then deadlock could 
  291.   occur.
  292.  
  293.   Updated tryAcquire()'s & join() with timeout, to help account for phantom signals
  294.   that could be sent in some circumstances.
  295.  
  296.   Update the timed wait on ConditionImpl which was erroneously returning true.
  297.     
  298.   My next task is to reevaulate the monitor solution once again and see if there 
  299.   is a way to improve the monitor itself to reduce the complexity of the synchronization
  300.   objects. Probably, using more traditional monitors will be more helpful - the main
  301.   purpose of the new implementation was to join together the logic for the synch objects
  302.   so that future changes could be made more easily.
  303.     
  304. VERSION 2.0.4:
  305.  
  306.   Added a random stress option that is used to assist in testing the library and
  307.   ensure the 3 basic synchronization objects are correct. It works by
  308.   inserting random sleeps wherever there is a lack of atomicity.
  309.  
  310.   Fixed the errors made in the synchronization logic in the last release. 
  311.   Fixed a typo resulting from my notoriously bad spelling in Timer.
  312.     
  313. VERSION 2.0.3:
  314.  
  315.   Updates to Timer.
  316.     
  317.   Updates to ConditionImpl.
  318.  
  319. VERSION 2.0.2:
  320.  
  321.   Updates to the some of the #defines for Windows platforms
  322.     
  323.   Updates to the synchronization objects implementation. 
  324.     
  325.   Updated executors docs somewhat, I didn't realize how unclear the documents were
  326.   I wrote them two years ago :)
  327.     
  328.   SynchExecutors will consume tasks now by default, unless you specify otherwise
  329.   using the template parameter. This makes all the Executors behave similarly.
  330.     
  331. VERSION 2.0.1:
  332.     
  333.  
  334.   Settled on all the changes for the 2.0.X series, this will be the first 
  335.   stable 2.0.X release.
  336.  
  337.   Removed CheckedMutex, Mutex now throws Deadlock_Exception in order to increase
  338.   usability. 
  339.  
  340.   The newer monitor implementation for to control the threads & interruption allowed
  341.   me to merge alot more of the code together for the POSIX & WIN32 implementations; 
  342.   which makes this much easier to maintain. Gradually, I'll probably begin to do this 
  343.   will the thread & threadlocal implementations as well.
  344.  
  345.   This newer implementation also deals with some of the subtle synchronization 
  346.   errors in the 1.0.X version.
  347.  
  348.   After having learned Win95 does not support the InterlockedComparExchange() function
  349.   an alternate spin lock implementation was added for people who need support on that 
  350.   platform (FastMutex classes).
  351.     
  352. VERSION 2.0.0d:
  353.  
  354.   Removed the overlapped locks in release(), eliminating that potential deadlock.
  355.     
  356. VERSION 2.0.0c:
  357.     
  358.   Timeouts of 0 are now correctly treated as 0 instead of infinite
  359.   waits.
  360.  
  361.   Updates for Conditions.
  362.   Fixed all tryAcquire()'s
  363.     
  364. VERSION 2.0.0b:
  365.  
  366.   Small fix in the Win32 kill(), notify() instead of interrupt(). 
  367.  
  368.   Custom spin lock was added for the FastMutex & RecursiveFastMutex 
  369.   Win32 implementations - apparently, TryEnterCriticalSection() does
  370.   not work at all on some windows platforms.
  371.  
  372.   Misc project adjustments, (defines etc).
  373.     
  374. VERSION 2.0.0a:
  375.  
  376.   POSIX & WIN32 implementations now function quite similarly and will simpler to maintain.
  377.  
  378.   Revised the primatives for both Win32 & POSIX implementations, check the 
  379.   docs for changes in Mutexes, Conditions & Semaphores. These updates
  380.   address subtle synchronization problems in the original implementation
  381.   as well as usability in general.
  382.     
  383.   Timer values relative to time library loaded, to avoid overflows.
  384.  
  385.   Reimplemented Threads
  386.     
  387.    join() is interruptable & has optional timeout - see docs    
  388.    kill() is more reliable - see docs
  389.    misc updates that address previous implementations subtle errors
  390.     
  391.   Fixed BlockingQueue cancel() method.
  392.   Fixed ThreadManager sending interrupt() to threads no longer running when
  393.   wantNotify() was true.
  394.     
  395.   Reimplemented ThreadLocals
  396.  
  397.   More detailed documentation.
  398.     
  399. VERSION 1.5.4:
  400.  
  401.   Fixed a bug in Win32_MutexImpl.cxx, and Win32_RecursiveMutexImpl.cxx. The waiter lists
  402.   were erroneously decremented in some cases, which caused some mutexes to never
  403.   unlock.
  404.     
  405.   Fixed the subtle race condition in the POSIX_FastRecursiveMutex implementation.
  406.   The power went out for 48 hrs so I was un-busy enough and came up with something
  407.   I think will fix it.
  408.  
  409.   Updated a documentation error.
  410.  
  411.   Updated Timer.cxx so that Timer::now() returns more accurate millisecond timing.
  412.  
  413.   Updated Win32_ThreadManager to be more stlport friendly. 
  414.  
  415.     
  416. VERSION 1.5.3:
  417.  
  418.   Fixed a bug in WIN32_ThreadImpl.cxx that caused Thread::sleep() to
  419.   throw Synchronization_Exception instead of Interrupted_Exception.
  420.  
  421.   Fixed a bug in MonitoredQueue that threq NoSuchElement_Exception 
  422.   rather than Timeout_Exception.
  423.  
  424.   Fixed POSIX_ThreadImpl.cxx, ThreadImpl::wait(...) The timing for the POSIX
  425.   implementation should be better now. It now spends far less time playing with
  426.   time values so it is more acurate.
  427.     
  428. VERSION 1.5.2:
  429.  
  430.   Updated executor templates to allow for a little more flexibilty. You can now just plugin
  431.   a new queue or lock implementation rather than having to subclass the AbstractExecutor and
  432.   reimplementing an Exector when all you really neede to change was the queue.
  433.     
  434.   Updated templates to help compilers that were having trouble generating default 
  435.   values for static members.
  436.  
  437.   Updated time-math in the thread implementation - nanoseconds are measured in billionths
  438.   now as they should be instead of in millionths.
  439.  
  440.   Added EXTRA_CXXFLAGS and EXTRA_LDFLAGS to the build files so that users can customize
  441.   the build. For example, make "EXTRA_CXXFLAGS=-my-compilers-flags", etc.
  442.  
  443.   Removed unneccessary 'using namespace std' statements. More friendly for people using 
  444.   various STL implementations which have std::fatal & std::abort defined. That overlap
  445.   caused ambiguity errors when the using statements were present.
  446.     
  447. VERSION 1.5.1:
  448.  
  449.   Updates to misc. throw() specification errors that some compilers caught
  450.   Small update to Win32 project files
  451.     
  452. VERSION 1.5.0:
  453.  
  454.   Simplified templates (Executors, etc) avoids multiple definition error when linking
  455.   Timer error fixed  
  456.   Misc bugs (minor) in Win32 implementation repaired.
  457.   Moved old Mutex to PlainMutex, replace with a Mutex that can be interrupted
  458.   which is more useful in general. For most cases the FastMutexes can be used in
  459.   thier place when the user desires no interruption
  460.  
  461.   Added a couple contributed header for disabling warning with VC, you
  462.   can use them to disable warnings in general for visual c's 
  463.   handling of stl symbols. (optional - vc specific)
  464.     
  465.     
  466. VERSION 1.4.4:
  467.  
  468.   Fixed bad throw clauses in the examples that gcc 3.0 choked on.
  469.   Updated templates to include a default template with a specialzation for
  470.   daemon threads, resolves alot of problems with compilers generating the 
  471.   code for those tempalte multiple times.
  472.     
  473. VERSION 1.4.4:
  474.  
  475.   Fixed bad throw clauses in the examples that gcc 3.0 choked on.
  476.   Fixed typo with #ifndef/#define in Win32_FastRecursiveMutex.h
  477.   Corrected documentation for AutoPtr 
  478.   Improved the GNU autoconf/automake builds (again). 
  479.   - Added '--enable-examples' option to configuration
  480.   - Updated configuration files to with libtool 1.4, the older ltconfig
  481.     cause some problems with some systems.
  482.   - Fixed the 'distcheck' rule. 
  483.     
  484. VERSION 1.4.3:    
  485.  
  486.   Moved the headers to a more standandard directory, everyone asked me
  487.   for it.
  488.     
  489.   Fixed a timeout oversight the ThreadImpl.
  490.   - Blocking with a timeout was not responding correctly.
  491.   - Added one more thread state, JOINING. Prevents multiple joins,
  492.     while allowing the rest of the logic to function correctly.
  493.     
  494.   Improved the GNU autoconf/automake builds. 
  495.   - Added 'make rpm'
  496.   - Added 'make docs'
  497.   - Fixed 'make dist'; previously, I had intended ppl only to use 
  498.     'make' & and 'make install'
  499.   - You learn more about autoconf every time you have to update this
  500.     stuff. Good tool, big learning curve :)
  501.     
  502. VERSION 1.4.2:
  503.     
  504.   Fixed a typo in the AutoPtr class template
  505.     
  506. VERSION 1.4.1:
  507.  
  508.   Added a pthread.m4 macro, Updaed other misc build files
  509.   Fixed some errors with the throw clauses on Worker & InheritableThreadLocal
  510.   Fixed the Timer class which has been overlooked since the improvements
  511.   to managing static object were made
  512.     
  513. VERSION 1.4.0:
  514.  
  515.   Make more distinct the change in kill() and other behavoir in the  
  516.   last few version.
  517.     
  518. VERSION 1.3.5:
  519.  
  520.   Enchanced the ThreadLocal variables.
  521.   Updated & simplified FastMutexs. 
  522.    
  523. VERSION 1.3.4:
  524.  
  525.     Revised the implementation classes a bit.
  526.     Revised the Worker class so it can be canceled/killed
  527.     without having effects on executing tasks.
  528.     Added new/better support for killing threads
  529.     Added more comments to the implementation classes
  530.     
  531. VERSION 1.3.3:
  532.  
  533.     Non-realtime thread priorties, prelimary support
  534.     
  535. VERSION 1.3.2:
  536.  
  537.     Updated subtle bug with threads starting up on some posix
  538.     systems.
  539.     
  540.     Updated errors in the Win32 semaphore classes.
  541.     Updated redudancy is in the POSIX semaphore classes.
  542.  
  543.     Converted Barrier & Latch to more appropriate template 
  544.     classes
  545.     
  546. VERSION 1.3.1:
  547.  
  548.     Updated errors in Win32 build files
  549.     Updated the Observable template to be friendly with more compilers
  550.     
  551. VERSION 1.3.0:
  552.     
  553.     Updated compilation bug in Win32 dynamic build. That build will
  554.     compiler correctly again and the dll version will have the same
  555.     behavior as all other builds, making things more predictable.
  556.  
  557.     Updated executor classes to make room for reusable task objects
  558.     and a little more flexibility
  559.  
  560.     
  561. VERSION 1.2.4:
  562.  
  563.     Fixed an oversight in the documentation configuration file and
  564.     the Timer.cxx, I released 1.2.3 just a little too hastily :)
  565.     
  566. VERSION 1.2.3:
  567.  
  568.     Updated WIN32 & POSIX Thread management
  569.     Bug fix in WIN32 thread wait() routines
  570.     Added daemon thread support for static objects
  571.     
  572. VERSION 1.2.2:
  573.  
  574.     Factory template added
  575.     Added support for handling static destruction problems
  576.  
  577. VERSION 1.2.1:
  578.  
  579.      Fixed subtle bug in POSIX_ConditionImpl
  580.      Upated all classes  - misc changes
  581.  
  582. VERSION 1.2.0:
  583.  
  584.     Updated much of the implementation classes for the synchronization
  585.     objects. Much faster, and reduced contention.
  586.  
  587.     Updated the Cancelation interface
  588.     Updated all classes using the Cancalation interface
  589.     
  590. VERSION 1.1.3:
  591.  
  592.     Spell checked the documents (tedius)
  593.  
  594.     Bug fix in Barrier.cxx
  595.     Bug fix in WIN32_FastRecursiveMutex.cxx
  596.     Bug fix in WIN32_ConditionImpl.cxx
  597.     
  598.     Cleaned up the System & ThreadImpl interactions
  599.     Cleaned up POSIX & WIN32 ThreadImpl classes
  600.  
  601.     Updated Documentation (noticable change)
  602.     Updated ThreadLocal classes
  603.     Updated ThreadImpl classes
  604.  
  605.     Miscellaneuos updates to make some class definitions for
  606.     formal (addition of needed throw() clauses, etc)
  607.  
  608.     Had some testing on Tru64 unix that was posative
  609.     
  610. VERSION 1.1.2:
  611.     
  612.     Bug fixes in the Thread class. I had overlooked that reference Thread
  613.      objects (eg from Thread::current()) were deleting the thread implementations
  614.     mistakenly
  615.  
  616.     Added a very usful Observable template
  617.     Added timer classes
  618.  
  619.     There might be several other bug fixes I forgot to document completely, most
  620.     of this work was done because I was using Zthreads in creating another application
  621.     so I just fixed and enhanced the library as was appropriate
  622.  
  623.     Also, there are now static & shared library builds for all supported platforms
  624.  
  625. VERSION 1.1.1:
  626.  
  627.     StaticSingletion template was added
  628.  
  629.     This is another build update, the library will now install
  630.      so it is much easier to use way.
  631.  
  632.     Versioned shared libraries were also added using libtool. You
  633.         can link against the shared library, or your can link against
  634.         the .la file in build directory
  635.  
  636.     A 'zthread-config' script was also added to help other write 
  637.     configure scripts that look for various versions of the library
  638.  
  639.  
  640.         Some very useful information for the autoconf tools that helped
  641.         can be found at the following URL
  642.       
  643.         http://www.murrayc.com/learning/linux/building_libraries/building_libraries.shtml#RecommendedReading
  644.  
  645. VERSION 1.1.0-2:
  646.     
  647.     This release basically include some packaging fixes. 
  648.     The autoconf scripts generate Makefiles now that link with
  649.     -pthread instead of -lpthread on FreeBSD
  650.  
  651. VERSION 1.1.0-1:
  652.  
  653.     Someone used BoundsChecker and caught a small memory leak
  654.     that was fixed. There was an '==' where a '!=' was needed.
  655.     I wish I could include thier name, but when my university
  656.     email account was closed it ate all my old email so I ended up
  657.     losing that corespondance
  658.  
  659. VERSION 1.1.0:
  660.  
  661.     This release has many changes.
  662.  
  663.     For one, I have tightened up the exception classes. This makes
  664.     the exceptions easier to handle, the code in general, easer to
  665.     read. The exceptions can carry useful information now where as
  666.     before they were just objects of different types being thrown
  667.  
  668.     Some exceptions have been removed because they were reduntant
  669.  
  670.     Thread priorites have been remove because I don't feel there is
  671.     a good reason to have them. Thread priorities act differently 
  672.     across all machines, and my goal in creating this library was
  673.     to build a usable archtechure for controlled predicatable 
  674.     multithreading. Thread priorites don't fit in.
  675.  
  676.     Runnable objects return void now. There is no need to a runnable
  677.     object to return a value. I felt this was an uneeded complexity.
  678.     Enough has been provided in this library to have the results of    
  679.     task run by other threads commincated in a number of better ways
  680.     than a return value.
  681.  
  682.     A ThreadLocal object was added to provided access to local thread
  683.     storage. This is very much like Java' ThreadLocal object.
  684.  
  685.     All of the basic synchronization objects have been improved. Several
  686.     new ones have been added whose purposes are straitforward.
  687.  
  688.     The implementation of the this package was revised and refactored.
  689.     There is no longer a need for a SyncFactory, and a whole layer of 
  690.     virtual function calls was also removed. This increased the speed
  691.     and elegance of the code. The ThreadImpl classes were also better
  692.     encapsulated.
  693.  
  694.     The Thread class is now extendable and you can use pretty much just
  695.     a like a Java Thread.
  696.  
  697.     The queue classes have all been updated. I think there may even
  698.     be one more than before. 
  699.  
  700.     I have refined these queue classes as the executor pattern I was
  701.     using improved. I added a 'Cancelable' interface to these objects
  702.     hopefully I will have the time to write a small paper on the pattern
  703.     to fully explain it. Most of the executor pattern I improved in 
  704.     java and I just recently updated zthreads to reflect this. I may
  705.     relese a java supplement to the library shortly. I find that java 
  706.     is very useful when expirementing with different types of patterns.
  707.     
  708.     
  709.